// import com.alibaba.druid.FastsqlException;
// import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.io.IOException;
#pragma once
#include <sstream>
#include "../../../../ast/expr/SQLCharExpr.h"
#include "MySqlExpr.h"

class MySqlCharExpr : virtual public SQLCharExpr, virtual public MySqlExpr
{
public:
  string_ptr charset;
  string_ptr collate;

  string_ptr type;

  MySqlCharExpr();

  MySqlCharExpr(string_ptr text);

  MySqlCharExpr(string_ptr text, string_ptr charset);

  MySqlCharExpr(string_ptr text, string_ptr charset, string_ptr collate);
  SHAREDOBJECT(MySqlCharExpr);

  string_ptr getCharset();

  void setCharset(string_ptr charset);

  string_ptr getCollate();

  void setCollate(string_ptr collate);

  string_ptr getType();

  void setType(string_ptr type);

  void output(std::stringstream * buf);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(MySqlASTVisitor_ptr visitor);

  string_ptr toString();

  SQLObject_ptr clone();
};
